package com.qf.blog.dao.daoimpl;


import com.qf.blog.core.utils.DruidTool2;

import com.qf.blog.dao.InvitataionDao;
import com.qf.blog.entity.InvitataionEntity;
import com.qf.blog.entity.UserEntity;
import com.qf.blog.vo.IndexDataVo;
import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.BeanListHandler;


import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * @author zyt
 * @version 1.0
 */
public class InvitataionDaoImpl implements InvitataionDao {
    // 先创建一个QueryRunner对象
    QueryRunner qr = new QueryRunner(DruidTool2.dataSource);

    /**
     * 查询的方法  用这个查询的方法把 帖子表的数据返回给service
     * @return
     * @throws Exception
     */
    @Override
    public List<IndexDataVo> indexDataList() throws Exception {
        // 1. 先准备sql语句
        // 左外联表查询 输出帖子表的信息和 用户表的头像
        String sql ="SELECT d.id, d.user_id AS userId, " +
                "d.title, d.content, d.type, d. STATUS, d.create_time AS " +
                "createTime, d.score, u.username, u.header_url FROM " +
                "t_discuss_post d LEFT JOIN t_user u ON (u.id = d.user_id)";
            //用集合接
        List<IndexDataVo> list = qr.query(sql,new BeanListHandler<IndexDataVo>(IndexDataVo.class){
             @Override
            public  List<IndexDataVo> handle (ResultSet resu) throws SQLException {
                /* 1.先准备一个集合用来存查询的数据 */
                List<IndexDataVo> indexDataVoList = new ArrayList<>();

                //将指针移动到当前位置的下一行。ResultSet 指针的初始位置位于第一行之前；
                // 第一次调用next()方法将会把第一行设置为当前行；
                // 第二次调用next()方法指针移动到第二行，以此类推。
                //指针移动到最后一行之后返回false，可以用作循环结束的条件。
                // 在两种情况下：遍历到最后一行之后；
                // 或者当 ResultSet 中没有元素、行数为0时，返回false退出循环。
                while (resu.next()){

                    /*   2.创建一个indexdatevo的对象 */

                    // 这个里里面放的是帖子 和用户（发布者）
                    IndexDataVo indexDataVo = new IndexDataVo();

                    /* 3. 创建一个帖子 和用户（发布者）的对象*/

                    InvitataionEntity invitataionEntity= new InvitataionEntity();
                    UserEntity userEntity = new UserEntity();

                    /* 4.从ResultSet resu 的结果集中把数据取出来  分别放到对应的对象中*/

                    // 这是帖子表的
                    int id = resu.getInt("id");  // 编号
                    int userId = resu.getInt("userId"); // 用户id
                    String title = resu.getString("title");//  表题
                    String content = resu.getString("content"); // 内容
                    int  type = resu.getInt("type"); // 用户的级别 （普通用户 ..vip）
                    int status = resu.getInt("STATUS"); // 是否被拉黑
                    Date createTime = resu.getDate("createTime");// 用户发帖时间
//                    int commentCount = resu.getInt("commentCount");// 评论数量
//                    double score = resu.getDouble("score"); // 帖子的分数
                    // 这是发布人表的
                    String username = resu.getString("username"); // 发帖人的用户名
                    String header_url = resu.getString("header_url"); // 发帖人头像的url

                    /* 5. 封装帖子信息 */

                    // 帖子表
                    invitataionEntity.setId(id);
                    invitataionEntity.setUserId(userId);
                    invitataionEntity.setTitle(title);
                    invitataionEntity.setContent(content);
                    invitataionEntity.setType(type);
                    invitataionEntity.setStatus(status);
                    invitataionEntity.setCreateTime(createTime);

                    // 发帖人表
                    userEntity.setUsername(username);
                    userEntity.setHeaderUrl(header_url);

                    // 把封装好的 帖子表和发贴人表 放在indexDataVo对象中
                    indexDataVo.setInvitataionEntity(invitataionEntity);
                    indexDataVo.setUserEntity(userEntity);

                    // 把这个indaxdatavo这个对象 放在第1步准备好的集合里
                    indexDataVoList.add(indexDataVo);
                }
                return indexDataVoList;
            }
        });
        return list;
    }

    /**
     * 插入的方法
     * @param
     * @return
     * @throws Exception
     */
    @Override
    public Integer insert(InvitataionEntity invitataionEntity) throws Exception {
        return null;
    }

    /**
     * 根据id修改的方法
     * @param id
     * @return
     * @throws Exception
     */
    @Override
    public InvitataionEntity selectByid(Integer id) throws Exception {
        return null;
    }

    /**
     * 根据id修改的方法
     * @param
     * @return
     * @throws Exception
     */
    @Override
    public Integer updeteByid(InvitataionEntity invitataionEntity) throws Exception {
        return null;
    }

    /**
     * 根据id删除的方法
     * @param
     * @return
     * @throws Exception
     */
    @Override
    public Integer deleteByid(Integer id) throws Exception {
        return null;
    }

    /**
     *
     * @return
     * @throws Exception
     */
    @Override
    public List<InvitataionEntity> selectList() throws Exception {
        return null;
    }

    @Override
    public Integer batchRemove(List<Integer> ids) throws Exception {
        return null;
    }
}
